1. Background and Relevant Art
Computer systems and related technology affect many aspects of society. Indeed, the computer system's ability to process information has transformed the way we live and work. Computer systems now commonly perform a host of tasks (e.g., word processing, scheduling, accounting, etc.) that prior to the advent of the computer system were performed manually. More recently, computer systems have been coupled to one another and to other electronic devices to form both wired and wireless computer networks over which the computer systems and other electronic devices can transfer electronic data. Accordingly, the performance of many computing tasks are distributed across a number of different computer systems and/or a number of different computing environments.
In some computing environments, databases are used to manage sets of data for one or more database tenants (e.g., users, organizations, etc.). When managing data for multiple tenants, an isolation boundary can be used to separate data for different database tenants and to promote security.
Often isolation boundaries are formed by using a separate database per tenant. For example, data from one user can be separated from data for all other users by storing that user's data in a separate database. However, some applications manage a very large number of tenants. For example, social networking sites can have hundreds of millions of users. Maintaining a separate database per tenant (user) can become cumbersome and resource intensive.
In some environments, isolation boundaries are formed by sharding. Sharding is a form of horizontal partitioning that splits (partitions) one or more tables by dividing different rows into different tables. Horizontal partitioning reduces the total number of rows in each table, reducing index size across a single instance of a schema (or same logical server). Sharding goes further by splitting (partitioning) one or more tables across multiple servers (logical or physical). As such, sharding enables distribution of a larger database over multiple machines, improving performance. Sharding is, however, difficult to implement, and typically requires hand-coding and complex coordination between the application layer and the database layer.
Whatever the isolation scheme is used, data isolation may alter the arrangement of data in a database or in database partitions, either while the database is online or offline. As such, the location of data sets may change within the database environment, even though the underlying data may remain the same. Consequently, a given database query may return differing results at different times based on a current arrangement of data, even though the data has not changed.